#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：图灵学习 
@File    ：15.多任务对象的交叉使用.py
@IDE     ：PyCharm 
@Author  ：ChenLiGao
@Date    ：2024-11-08 14:51
'''
import asyncio
import time
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def work():
    print("这是一个普通任务....")
    time.sleep(2)
    return "这是当前任务的返回值"

async def main():
    with ThreadPoolExecutor(max_workers=2) as pool:
        # pool.submit(work)
        result = await loop.run_in_executor(pool, work)# 事件循环对象允许执行普通任务，但是在传递普通任务时，run_in_executor方法会在底层创建线程池
    return result

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(main())
    print(res)


"""
    run_in_executor方法：允许协程通过进程池/线程池允许普通任务，并且返回一个可等待对象
    run_in_executor默认创建线程池，如果需要创建进程池需要指定executor参数
"""